package cn.smart.epic.common.constant.factory;

import cn.smart.epic.common.constant.cache.Cache;
import cn.smart.epic.common.constant.cache.CacheKey;
import cn.smart.epic.common.persistence.model.Dict;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;

/**
 * @Auther Z.B
 * @date 2017/9/21 17:00
 * @Email 2545375@qq.com
 * @Description 常量生产工厂的接口
 * @since 1.0
 */

public interface IConstantFactory {

    /**
     * 根据用户id获取用户名称
     * @param userId
     * @return
     */
    String getUserNameById(Integer userId);

    /**
     * 根据用户Id获取用户帐号
     * @param userId
     * @return
     */
    String getUserAccountById(int userId);

    /**
     * 通过角色ids获取角色名称
     * @param roleIds
     * @return
     */
    @Cacheable(value = Cache.CONSTANT,key="'" + CacheKey.ROLES_NAME+ "'+#roleIds")
    String getRoleName(String roleIds);

    /**
     * 通过角色id获取角色名称
     * @param roleId
     * @return
     */
    @Cacheable(value = Cache.CONSTANT,key = "'" + CacheKey.SINGLE_ROLE_NAME + "' +#roleId")
    String getSingleRoleName(int roleId);

    /**
     * 通过角色id获取角色英文名称
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_TIP + "'+#roleId")
    String getSingleRoleTip(Integer roleId);

    /**
     * 获取部门名称
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.DEPT_NAME + "'+#deptId")
    String getDeptName(Integer deptId);

    /**
     * 获取字典名称
     * @param dictId
     * @return
     */
    String getDictName(int dictId);

    /**
     * 获取通知标题
     */
    String getNoticeTitle(Integer dictId);

    /**
     * 根据字典名称和字典中的值获取对应的名称
     */
    String getDictsByName(String name, Integer val);

    /**
     * 获取性别名称
     */
    String getSexName(Integer sex);

    /**
     * 获取用户登录状态
     */
    String getStatusName(Integer status);

    /**
     * 查询字典
     */
    List<Dict> findInDict(Integer id);

    /**
     * 获取被缓存的对象(用户删除业务)
     */
    String getCacheObject(String para);

    /**
     * 获取子部门id
     */
    List<Integer> getSubDeptId(Integer deptid);

}
